r90>25=.nt>+>7z5n2k<1561/+;5n{.57u07k{16;5=.nt>+>7z5n2k<15n>29l.05,90>2/3k5n2k7,50{10;<o5>/>?ˆ581:+z6,561/+;



Podobné dokumenty
Příklady popisu základních obvodů ve VHDL

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

1. Seznamte se s výukovou platformou FITkit (

Návrh ovládání zdroje ATX

Návrh. číslicových obvodů

Násobičky, Boothovo překódování. Demonstrační cvičení 7

Řadiče periferií pro vývojovou desku Spartan3E Starter Kit Jaroslav Stejskal, Jiří Svozil, Leoš Kafka, Jiří Kadlec.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y. Rovnicí y = x 1. x 0. Přiřazení signálů: ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y Rovnicí y = x 1. Přiřazení signálů:

Cíle. Teoretický úvod

PROCESOR. Typy procesorů

PK Design. MB-S2-150-PQ208 v1.4. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 ( )

ZDROJE MĚŘÍCÍHO SIGNÁLU MĚŘÍCÍ GENERÁTORY

Alfanumerické displeje

Multimediální systémy. 08 Zvuk

Vzorkování. Je-li posloupnost diracových impulzů s periodou T S : Pak časová posloupnost diskrétních vzorků bude:

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Úvod do jazyka VHDL. Jan Kořenek Návrh číslicových systémů

Číslicové obvody a jazyk VHDL

Digitální paměťový osciloskop (DSO)

Měřič krevního tlaku. 1 Měření krevního tlaku. 1.1 Princip oscilometrické metody 2007/

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Pokročilé využití jazyka VHDL. Pavel Lafata

Sčítačky Válcový posouvač. Demonstrační cvičení 6

12. VHDL pro verifikaci - Testbench I

FLOOR TALKER. Uživatelský návod verze 1.0. TELSYCO s.r.o. Prostřední 627/ Praha 4.

Měření kmitočtu a tvaru signálů pomocí osciloskopu

LED_007.c Strana: 1/5 C:\Michal\AVR\Výukové programy\archiv\ Poslední změna: :01:48

Direct Digital Synthesis (DDS)

Implementace čítačů v číslicových systémech 2 Jakub Šťastný ASICentrum, s.r.o. FPGA Laboratoř, Katedra teorie obvodů FEL ČVUT Praha

Paměti EEPROM (1) Paměti EEPROM (2) Paměti Flash (1) Paměti EEPROM (3) Paměti Flash (2) Paměti Flash (3)

enos dat rnici inicializaci adresování adresu enosu zprávy start bit átek zprávy paritními bity Ukon ení zprávy stop bitu ijíma potvrzuje p

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Maticová klávesnice. Projekt do předmětu Subsystémy PC. Brno, Tomáš Kreuzwieser, Ondřej Kožín

7. ODE a SIMULINK. Nejprve velmi jednoduchý příklad s numerických řešením. Řešme rovnici

AX-DG1000AF. UPOZORNĚNÍ popisuje podmínky nebo činnosti, které mohou způsobit zranění a smrt.

Elektronické sirény MAESTRO

Pracovní třídy zesilovačů

3. D/A a A/D převodníky

Souhrn Apendixu A doporučení VHDL

Směrová nn ochrana MEg51. Uživatelské informace

PŘÍTECH. Klarinet Vlastnosti zvuku

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, Booleova algebra, De Morganovy zákony Student

2. Entity, Architecture, Process

L A B O R A T O R N Í C V I Č E N Í

Elektronický psací stroj

Signálové a mezisystémové převodníky

Příručka. Bezpečné odpojení osových modulů MOVIAXIS Aplikace. Vydání 10/ / CS

VY_32_INOVACE_ENI_2.MA_04_Zesilovače a Oscilátory

LBC 3251/00 Aktivní reproduktor Line Array Intellivox 1b

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Sekvenční logika - debouncer, čítače, měření doby stisknutí tlačítka Student

Druhá generace palivoměru LUN 5275 pro letoun EV-55

Výklad učiva: Co je to počítač?

Digitalizace signálu (obraz, zvuk)

Laboratorní zdroj - 6. část

Zvuk a jeho vlastnosti

... sekvenční výstupy. Obr. 1: Obecné schéma stavového automatu

1. ÚVOD 2. PROPUSTNÝ MĚNIČ 2009/

TECHNICKÁ UNIVERZITA V LIBERCI

SPM SPECTRUM NOVÁ UNIKÁTNÍ METODA PRO DIAGNOSTIKU LOŽISEK

Kompletní systémové požadavky, informace o kompatibilitě a registraci produktu, navštivte sekci podpory na webové stránce M-Audio:

6. Střídavý proud Sinusových průběh

Architektura počítače

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

PK Design. MB-ATmega16/32 v2.0. Uživatelský manuál. Základová deska modulárního vývojového systému MVS. Verze dokumentu 1.0 (21.12.

Osnova: 1. Klopné obvody 2. Univerzálníobvod Oscilátory

Jazyk VHDL konstanty, signály a proměnné. Jazyk VHDL paralelní a sekvenční doména. Kurz A0B38FPGA Aplikace hradlových polí

GRAFICKÉ ROZHRANÍ V MATLABU PRO ŘÍZENÍ DIGITÁLNÍHO DETEKTORU PROSTŘEDNICTVÍM RS232 LINKY

ŘÍZENÍ FYZIKÁLNÍHO PROCESU POČÍTAČEM

Osciloskopická měření

Číslicový otáčkoměr TD 5.1 AS

STAVEBNÍ NÁVODY 1 pro činnost v elektro a radio kroužcích a klubech

FunKey 61 Keyboard Uživatelský manuál

DIGITÁLNÍ MULTIMETR DUCA- LCD96

Zvuková karta. Zvuk a zvuková zařízení. Vývoj, typy, vlastnosti

ASYNCHRONNÍ ČÍTAČE Použité zdroje:

Univerzita Tomáše Bati ve Zlíně

DIGITÁLNÍ KOMUNIKACE S OPTICKÝMI VLÁKNY. Digitální signál bude rekonstruován přijímačem a přiváděn do audio zesilovače.

Úloha 9. Stavové automaty: grafická a textová forma stavového diagramu, příklad: detektory posloupností bitů.

Cílem této kapitoly je seznámit s parametry a moduly stavebnice NXT. Obr. 1: Brick s moduly [3]

Představíme si funkci fyzické vrstvy. Standardy fyzické vrstvy, způsoby přenosu, způsoby kódování a veličiny popisující přenos dat.

9. Číslicové osciloskopy. 10. Metodika práce s osciloskopem

Zpráva k semestrální práci

V 70. letech výzkumy četnosti výskytu instrukcí ukázaly, že programátoři a

Praktické úlohy- 2.oblast zaměření

) informace o stavu řízené veličiny (předávaná řídícímu systému) - nahrazování člověka při řízení Příklad řízení CNC obráběcího stroje

LOGIC. Stavebnice PROMOS Line 2. Technický manuál

Zkouškové otázky z A7B31ELI

Zvukové jevy. Abychom slyšeli jakýkoli zvuk, musí být splněny tři základní podmínky: 1. musí existovat zdroj zvuku

Dvoukanálový monitor absolutního chvění MMS 6120

Implementace čítačů v číslicových systémech Jakub Šťastný

Netlumené kmitání tělesa zavěšeného na pružině

Laboratorní měření 1. Seznam použitých přístrojů. Popis měřicího přípravku

Příspěvek k počítačové simulaci elektronických obvodů

Fyzikální praktikum 1

Použití programovatelného čítače 8253

Transkript:

33069 306074760630396 01234567896945606 2926922 736963 73 093769!"674 279023 36&'(' 7362639226667 36709216369331 47699439416643748 933 20643994341 7163699699966373 9963639932 67#4$6% 69

()!'*6)* de9065@f7ge)'*#6h'6'6i'j6klf 01/0>7K65756K72o>7z+5n2>/0{1=;5,0t,?I (3k3789d6}9f7fg m>=t15n>3u6~571=>9<;o>5n2k<1 E`[VF_ ZD FVG IXIXacaE`[VF_TDEƒ D FVGXQI IXaca EDTC]V_ ` ]EG 6-I5x93KL5p9:<.3ˆ5moIwI 8,/,o>7,0561=>7>t164+58n~/>?1+5=>5<.8;<o5,90>2/34<o5n2K75>/>?6>/06;<o5,5+9/;5/.5?405nt6N57N=>+56K/t1=3~ 7k3e3g n>29l16;59/0,6>716;5 5cc5,56K/t1=9:;<;<o5,90>2/3zo>58K3>6,5šI5cXcbXaaa5?Î57š106N5+>y64<o5021/06Nn2K76;<o =~/t1=3~57unt47,:;<;<o5859/0,6>716;5šk/0.5=29ozˆ5ot,7u5v I5=;t5œ5J21/06;o>58K3>6;395šIœabXaaR5?I k34116k3601kf30dg m2k<15/15?9=158,?47,058n2,<>7k6;+587939575>?7>=1<o5pmqri5st,76;+5<;t1+5/09=160,5?9=156,72o6>90 :1=6>=9<o45=.-.0Kt6;5/u6010.8K0>2575:,8u<15vswxI5w.-.0Kt6;5,9=.>5/u6010.8K0>25+9/;5?405n276N56,72y165, STUFVWGXYWZDE[\]W^_`TWGXaaRbXaca ABCDEFBGH<I5J>+KL5MN+1<OPGQQRRR +,-./012/3456,7,89:;<;5/09=.:6;5>?>2 ) Š6$Š60j&'6@& 62Š Œ Ž Ž @ 0123456789 945606 6 6!"#6$# %&'6! 6 r90>25=.nt>+>7z5n2k<1561/+;5n{.57u07k{16;5=.nt>+>7z5n2k<15n>29l.05,90>2/3k5n2k7,50{10;<o5>/>?ˆ581:+z6,561/+;

Obsah ÚVOD... 9 1 TEORETICKÝ ROZBOR... 10 1.1 ZVUK... 10 1.2 TÓNY... 10 1.3 PIÁNO... 11 1.4 SYNTÉZA ZVUKU... 12 1.4.1 Matematicko-fyzikální model... 13 1.4.2 Aditivní přístup... 13 1.4.3 Subtraktivní přístup... 13 1.4.4 Sampler... 14 1.4.5 Další metody... 14 1.5 STARTER KIT... 15 2 TÓN KLAVÍRU... 16 3 MODEL ADITIVNÍHO SYNTETIZÁTORU... 19 3.1.1 Harmonický průběh 262Hz... 19 3.1.2 Harmonický průběh s řízenou amplitudou... 19 3.1.3 Dvě harmonické složky... 20 3.1.4 Deset harmonických složek... 21 4 SYNTETIZÁTOR S PAMĚTÍ... 24 4.1 SIMULACE SYNTETIZÁTORU... 24 4.2 TECHNIKA SMYČEK... 28 5 NÁVRH JEDNODUCHÉHO SYNTETIZÁTORU... 29 5.1 TRANSPOZICE TÓNU... 29 5.2 PRINCIP FUNKCE ZAŘÍZENÍ... 30 5.3 NÁROKY KLADENÉ NA SYNTETIZÁTOR... 32 6 REALIZACE SYNTETIZÁTORU... 33 6.1 POPIS FUNKCE... 33 6.2 BLOKOVÉ SCHÉMA... 34 6.1 ŘÍDÍCÍ BLOK... 35 6.1.1 Návrh řídícího bloku... 35 6.2 REALIZACE ŘÍDÍCÍHO BLOKU... 36 6.3 BLOK CC 0-3... 38 6.3.1 Návrh bloku CC... 38 6.3.2 Realizace bloku CC... 39 6.3.3 Výsledek návrhu... 42 6.4 ŘÍZENÍ PAMĚTI... 42-7 -

6.5 DA PŘEVODNÍK... 43 7 ZÁVĚR... 44 8 SEZNAM POUŽITÝCH ZDROJŮ... 45 9 SEZNAM OBRÁZKŮ... 47 10 PŘÍLOHY... 49 10.1 SYNTETIZÁTOR V PROSTŘEDÍ SIMULINK... 49 10.1.1 Hlavní funkce... 49 10.1.2 Funkce WAV... 49 10.2 SYNTETIZÁTOR VE VHDL... 52 10.2.1 Blok CC časovač... 52 10.2.2 Blok CC - komparátor... 53 10.2.3 Blok CC - čítač... 54 10.2.4 Řídící blok nastavení... 55 10.2.5 Řídící blok řízení... 56-8 -

Úvod Tato diplomová práce se zabývá zpracováním zvuku v obvodech FPGA. Hlavním cílem bylo navrhnout jednoduchý digitální syntetizátor na bázi vývojové desky starter kit s obvodem FPGA Spartan 3 od firmy Xilinx. Než jsem přistoupil k samotnému návrhu v jazyku VHDL, simuloval jsem syntetizátor v systému Matlab. První kapitola diplomové práce představuje teoretický úvod do oblasti podstaty zvuku, tónů a hudebních nástrojů. Následně je představeno několik možných přístupů k řešení audio syntetizátoru. Druhá kapitola obsahuje spektrální analýzu tónu klavíru. Navazující třetí kapitola obsahuje nasimulované výsledky aditivního syntetizátoru v systému Matlab. Snažil jsem se přiblížit tónu klavíru, který jsem analyzoval. Čtvrtá kapitola se zabývá simulací, opět v systému matlab, syntetizátoru založeného na práci se vzorky zvuku uložených v paměti. Pátá kapitola se již zabývá základní principy, na kterých stojí navrhovaný syntetizátor. Obsahuje také výpočty, na kterých syntetizátor stojí. Šestá kapitola představuje výsledky dosažené v systému Xilinx ISE. Sedmá kapitola obsahuje zhodnocení dosažených výsledků této diplomové práce. - 9 -

1 Teoretický rozbor 1.1 Zvuk Je mechanické vlnění, které se šíří každým hmotným prostředím. Pokud mluvíme o zvuku, máme obecně na mysli podélné vlnění šířící se vzduchem [6]. Toto vlnění vnímá člověk svým uchem, v oblasti nízkých kmitočtů rovněž povrchem celého těla ve formě vibrací. Člověk vnímá frekvence v rozmezí přibližně 20Hz až do 20kHz (hranice jsou individuální), tento rozsah bývá často označován jako akustické pásmo. Zdrojem zvuku je každé chvějící se těleso. Efektivita tohoto zdroje je závislá na geometrickém tvaru aj. Dobrým zdrojem je třeba reproduktor. Ten představuje elektromechanický měnič, který přeměňuje elektrickou energii přiváděného signálu na energii mechanickou. Tato mechanická energie představuje drobné změny okolního tlaku, šířícího se do prostoru ve formě vlnoploch tj. zvuk. Jiný mechanický zdroj zvuku je např. kytara. Zde se využívá mechanického kmitání struny (i těla samotného nástroje) k vytváření zvuku. Zvuky se obvykle dělí na tóny a hluky. Tóny vznikají při pravidelném, v čase přibližně periodicky probíhajícím pohybu - kmitání. Jako hluky označujeme nepravidelné vlnění vznikající jako složité nepravidelné kmitání těles nebo krátké nepravidelné ruchy (srážka dvou těles, výstřel, elektrický výboj apod.). I hluky jsou využívány v hudbě, neboť k nim patří i zvuky mnoha hudebních nástrojů, především bicích [7]. 1.2 Tóny Jak již bylo řečeno, tón vzniká při pravidelném kmitání prostřednictvím hudebního nástroje na určité frekvenci. Tón představuje základní kámen hudby. Existuje sedm základních tónů c, d, e, f, g, a, h. Požadovaná základní frekvence tónu je dána lazením nástroje. Problematika lazení je velmi obsáhlá a dalece překračuje potřeby této diplomové práce. Je zde souvislost s historickým vývojem hudby, nástrojů i pokrokem v chápání podstaty zvuku [8]. Nejběžnější dnes používané lazení nástrojů je rovnoměrné temperované lazení. Oktáva je rozdělena na 12 intervalů, vznikne tak 7 celých tónů a 5 půltónů. Tón o oktávu výše má frekvenci dvojnásobnou oproti stejnému tónu z nižší oktávy. Každý následující tón má základní frekvenci f n+1 vyšší než tón předchozí f n [9]. Následující vztah (1) je velice důležitý a dá se využit při konstrukci syntetizátoru. f [Hz] (1) 12 n+ 1 = f n 2-10 -

Každý tón obsahuje kromě základní i řadu vyšších harmonických složek. Vyšších harmonické vznikají samostatným chvěním poloviny, třetiny a dalších zlomků struny nebo jiného tělesa vydávajícího tón. Právě přítomnost vyšších harmonických složek určuje vlastnosti tónu. Díky nim se liší zvuk jednotlivých hudebních nástrojů. Sudé násobky základního kmitočtu dávají tonu měkkou příjemnou barvu. Oproti tomu liché harmonické působí ostřejším zvukem [10]. 1.3 Piáno Klavír je strunný hudební nástroj, jehož struny jsou rozeznívány pomocí sady kláves. Klavírní mechanika je technicky nejkomplikovanější část nástroje. Skládá se z řady pák, které propojují klávesu s kladívkem a dusítkem strun vis. [11]. Při stisknutí klávesy se ze struny zvedne dusítko, plstěná krátká lišta, která brání struně znít. Jakmile se struna uvolní, dopadne na ni plstěné kladívko a rozezní ji. Po dopadu odskočí, aby strunu netlumilo a mohlo dle potřeby udeřit znovu. Když pustí hráč klávesu, dopadne dusítko zpět na strunu a ta ztichne. Délka tónu může být i po puštění klávesy prodloužena pomocí pedálu, dusítko v tomto případě neutlumí strunu. Obr. 1: Piáno Klaviatura dnešního piána má 88 kláves, což je sedm oktáv a část osmé. Každá oktáva sestává ze sedmy bílých kláves (C-D-E-F-G-A-H) které doplňuje pět černých kláves půltónů. Struny jsou upnuty v masivní konstrukci s rezonanční deskou či křídlem. Vlastnosti ozvučné (rezonanční) desky určují do velké míry kvalitu tónu. Deska může rezonovat mnoha způsoby na různých kmitočtech [12][13]. - 11 -

Klavír je bohužel dosti neskladný nástroj díky velkým rozměrům a velké hmotnosti. Výroba klavíru trvá i několik let, z toho plyne značná pořizovací cena. Nový klavír stojí běžně i více než milion korun. Tyto velké nevýhody klasického klavíru vedly ke vzniku jeho elektronické verze. Ta je na rozdíl od svého mechanického předchůdce dostupná široké veřejnosti. Další jejich velká výhoda je fakt, že odpadá nutnost složité údržby (ladění) klavíru. 1.4 Syntéza zvuku Pod pojmem syntéza zvuku rozumíme proces generování zvuku. Zvuk může být vytvářen mechanicky tj. hudebním nástrojem nebo elektronickou formou. V mé práci se budu věnovat elektronickému způsobu syntézy. Syntézou máme, v tomto případě, na mysli generování elektrického signálu nesoucí informaci o průběhu zvuku. Syntetizátory znamenaly revoluční skok ve vývoji hudby. Na konci šedesátých a v průběhu sedmdesátých let se hlavně ve Spojených státech zrodil nový styl hudby. Stejně jako se měnila dynamicky společnost tak se měnila i hudba. Skladby obsahovaly uměle do té doby neznámé syntetizované tóny a zvuky. Skladatelům se tak otevřela nová dimenze prakticky neomezených možností. Za zmínku stojí například dnes již legendární syntetizátor Mogg, na němž hudební inženýři skládali takové skladby jako je např. Superstition od Stevieho Wondera [14][15]. Obr. 2: Syntetizátor Mogg (1964) - 12 -

Výroba zvuku (resp. el. signálu, který nese informaci o zvuku) v syntetizátoru může být založena na různých principech zásadně lišících se svým přístupem k výrobě zvuku. 1.4.1 Matematicko-fyzikální model Jeden z možných přístupů představuje sestavení matematického modelu hudebního nástroje. Tento model popisuje jeho fyzikální podstatu. Může se jednat o model oscilujícího tělesa např. struny, nebo třeba oscilující sloupec vzduchu ve flétně. První syntetizátor na trhu založený na tomto přístupu byl v roce 1994 Yamaha VL1. [16] Obr. 3: VL1 1.4.2 Aditivní přístup Jakýkoliv periodický signál je možné rozložit do Fourierovi řady. Tento rozklad je možno použít i na zvukové signály. Co je ale hlavní tak lze i naopak skládáním vhodně řízených harmonických zdrojů znovu vytvořit zvuk (aditivní syntéza). Na tomto principu pracuje i výše zmíněný syntetizátor Mogg. Průběh zvuk klavíru se během znění velmi dynamicky mění. Na počátku dochází při úderu kladívka k rozeznění struny. Jako zdroj zvuku neslouží jen samotná struna, ale rezonuje i samotný klavír. Postupně jednotlivé složky zvuku doznívají a tón končí. Je tedy obtížné přesně nastavit všechny prvky tak aby vytvořily tón s požadovanými vlastnostmi. 1.4.3 Subtraktivní přístup Je to opačný přístup k syntéze než má aditivní syntetizátor. Principiálně je na začátku signál, který obsahuje několik vyšších harmonických. Může se jednat o signál ve tvaru obdélníku, pily, různé šumy atd. Tento signál je následně selektivně filtrován, přičemž z původního signálu jsou odstraněny nežádoucí složky. - 13 -

Tento syntetizátor se dnes obvykle řeší tak že původní signál je přehráván z paměti kde jsou uloženy vzorky různých zvuků. Tato metoda je dnes nejčastěji využívána, neboť výsledek syntézy je lépe kontrolovatelný. [17] 1.4.4 Sampler V paměti uvnitř syntetizátoru jsou uloženy vzorky různých zvuků. Může se jednat o jednoduché signály pro následné analogové zpracování, nebo se může jednat o nahrávky reálných hudebních nástrojů. Po stisku klávesy je vzorek načten z paměti, zpracován požadovaným způsobem a přehrán. Nejedná se tedy o syntetizátor v tom nejčistším slova smyslu. Z funkce sampleru plyne jeho největší omezení. Jedná se o digitální systém, který má k dispozici jen omezené množství vzorků ke zpracovávání. Množství dosažitelných výsledků je tedy taktéž omezený. Ale zůstává vždy možnost zařízení doplnit dalšími bloky a rozšířit jeho možnosti požadovaným směrem. Obr. 4: Sampler AKAI MPC2000 1.4.5 Další metody Existují ještě další metody realizace syntetizátoru. Ale jedná se spíše o modifikace některého z výše uvedených principů. - 14 -

1.5 Starter Kit Celé zařízení bude realizováno pomocí vývojové desky Spartan-3 FPGA Starter Kit. Ta je vyráběná, stejně jako obvod FPGA Spartan3, firmou Xilinx. Deska obsahuje mnoho integrovaných periferií, které se dají využít právě při vývoji zařízení. Na desce se nalézá [18]: - Xilinx XC3S200 Spartan-3 FPGA (256 pinový FPGA) - Platform flash konfigurační paměť o kapacitě 2Mb - Dvanáct 18Kb RAM (216Kbitů) - Port RS-232 - Port PS/2 - JTAG rozhraní - Tři 40-pinové rozšiřující porty - Čtyři sedmisegmentové LED displeje - Sada tlačítek a přepínačů Obr. 5: Spartan-3 FPGA Starter Kit - 15 -

2 Tón klavíru Na digitálním osciloskopu jsem provedl analýzu záznamu tónu klavíru. V průběhu znění tónu dochází k velkým změnám v jeho spektru a v amplitudě jednotlivých složek. Obrázky níže jsou pro tón C4 (nazývané též c nebo také střední C), jehož základní kmitočet je 262Hz. Obr. 6: Klaviatura Obr. 7: Amplituda tónu C4-16 -

Obr. 8: FFT, první sekunda znění tónu C4 Obr. 9: FFT, druhá sekunda znění tónu C4 Amplituda každé složky navíc kmitá na vlastním nízkofrekvenčním kmitočtu, řádově jednotky Hz. U prvních harmonických tato změna amplitudy dosahovala i +-10dB. Právě poměry těchto složek je určen charakteristický zvuk hudebního nástroje. - 17 -

Obr. 10: FFT, třetí sekunda znění tónu C4 Obr. 11: FFT, čtvrtá sekunda znění tónu C4 Z obrázků 8-11 je dobře vidět že harmonické na vyšší frekvenci doznívají rychleji než ty na nižším. Stejné je to i u samotných strun. Struny hlubokých tónů znějí mnohem déle než struny pro vysoké tóny. - 18 -

3 Model aditivního syntetizátoru Pomocí nástroje simulink, jež je součásti systému Matlab, jsem se pokusil namodelovat tón C4 pomocí skládání jednotlivých spektrálních složek, tedy aditivní metodou. Začal jsem od jednoduchého harmonického průběhu a postupně obvod doplňoval o další komponenty 3.1.1 Harmonický průběh 262Hz Obr. 12: Schéma, harmonický průběh Obr. 13: Výstupní signál 3.1.2 Harmonický průběh s řízenou amplitudou Obr. 14: Schéma zapojení - 19 -

Obr. 15: Amplitudová obálka Blok Repeating sequence interpolated5 řídí amplitudu signálu v čase. Hlasitost zvuku u hudebních nástrojů není během znění tonu konstantní. Na začátku je hlasitost vyšší a postupně tón doznívá. To je nutno pro věrné znění syntetizátoru také simulovat. Strmost změny hlasitosti má také svůj dopad na charakter vnímání zvuku. Navíc všechny tóny u reálných nástrojů neznějí stejně dlouze. Nejvyšší tony např. na klavíru dozní mnohem rychleji než tony nejnižší. 3.1.3 Dvě harmonické složky Obr. 16: Schéma zapojení Blok Gain (zisk, ale v našem případě menší než 1) zmenšuje amplitudu signálu na polovinu, jinak by ve špičkách došlo k limitaci signálu. Hodnota signálu se musí pro zpracování v následujícím bloku pohybovat od -1 do 1. Obdobný problém bude muset být vyřešen i při práci s vzorky zvuku. Musí být ošetřeno případné přetečení dat při součtu více vzorků. - 20 -

Obr. 17: Výstupní signál 3.1.4 Deset harmonických složek Obr. 18: Schéma zapojení Blok Repeating sequence interpolated1 řídí amplitudu vyšších harmonických. Díky tomuto bloku odezní vyšší harmonické rychleji než nižší složky. Zdroje 3x0,3 a 7x0,4 modulují na nízkém kmitočtu amplitudově první dvě harmonické složky signálu. - 21 -

Obr. 19: Amplitudová obálka Obr. 20: Časový průběh v t=0,5s - 22 -

Obr. 21: Časový průběh v t=3s - 23 -

4 Syntetizátor s pamětí Aditivní syntéza se ukázala vzhledem k nízké kvalitě dosaženým výsledkům na straně jedné a obtížné realizovatelnosti na straně druhé, jako nevýhodné řešení. Práce se vzorky zvuku je mnohem efektivnější způsob realizace digitálního syntetizátoru. Hudebnímu nástroji, syntetizátorům založeném na tomto principu se někdy říká Sampler. Obvod FPGA Spartan je pro úlohu zpracování digitálního audio signálu velmi vhodný. Po stisku klávesy by došlo k načtení příslušného vzorku z paměti, jeho zpracování (např. přičtení k již k přehrávanému tónu) a nakonec převedení pomocí D/A převodníku na analogový signál. Obr. 22: Blokové schéma syntetizátoru s pamětí typu FLASH Výhoda tohoto druhu syntetizátoru je že může simulovat velké množství nástrojů, limitující je pouze velikost paměti. Ale už z principu, na kterém je toto zařízení postavené plyne velké omezení. Syntetizátor přehrává záznam uložený v paměti. Vzorek během přehrávání není možné modifikovat, jako to lze bez problémů činit v reálné době u analogových syntetizátorů. 4.1 Simulace syntetizátoru Matlab podporuje velké množství různých formátů souborů včetně audio formátu wav. Použil jsem tedy Matlab a sestrojil v něm primitivní syntetizátor na bázi přehrávání zvukových vzorků (samplů). Nejdříve jsem pracoval v Simulinku, ale toto prostředí nepodporuje některé užitečné příkazy např. příkaz wavread. Je zde sice jeho obdoba ve formě funkčního bloku, ale nedařilo se mi odladit zde zapojení tak aby pracovalo dle mých představ. Proto jsem pracoval v klasickém prostředí Matlabu. Zdrojové kódy všech částí jsou k nalezení v kapitole přílohy. - 24 -

Pomocí příkazu wavread se dá snadno načíst obsah souboru wav, jeho vzorkovací kmitočet, bitovou hloubku a další dodatečné informace. Data se uloží ve formě vektoru o délce odpovídající počtu vzorků. Pokud je záznam stereofonní tak se z vektoru stává matice, která obsahuje dva sloupce, jeden pro každý kanál. Funkční hodnoty jednotlivých vzorků se pohybují v rozmezí (-1; +1). Když už jsou načteny vzorky v paměti ve formě vektorů, není nic snazšího než je řízeně sčítat, posouvat v čase apod. V grafickém prostředí programu Simulink jsem použil definovatelný blok, který se odkazuje na mnou vytvořenou matlabovskou funkci. Zdrojový kód je celého zařízení je v příloze (6.1). Obr. 23: Uživatelské rozhraní syntetizátoru v Simulinku Mnou vytvořený model se ovládá přes Simulink zdroji konstantního signálu. Názvy těchto zdrojů odpovídají názvům not. Hodnota zdroje určuje prodlevu v sekundách od začátku přehrávání celého výsledného datového, kdy se má začít přehrávat daný záznam. Pokud je hodnota nula sampl se přehraje okamžitě po zapnutí. Hodnota menší než nula znamená, že daný sampl nebude přehrán. Výstupní funkce y, vrací akorát hodnotu 1, která signalizuje funkčnost. Nebo se dá využít k vrácení jiné informace např. vzorkovací frekvence apod. - 25 -

Obr. 24: Výstupní signál, přehrává se celá oktáva najednou Na obrázku č. 24 je znázorněn průběh výstupních dat. Na ose x je vyneseno číslo vzorku, neboť funkční hodnoty jsou uložené v dlouhém vektoru. 22050 vzorků odpovídá jedné sekundě záznamu tj. vzorkovací frekvence, se kterou byl tento záznam pořízen je 22050Hz. V tomto případě je všech osm samplu přehráno ve stejný okamžik. Na obrázku je patrné, že dochází díky součtu maxim k překročení specifikovaného rozsahu výstupních hodnot (-1; +1). Další zajímavost je schod, který vzniká na začátku průběhu. Každý mnou použitý sampl v sobě nese malý kladný offset. Tento schodový průběh je vidět i na obr. 25 a 26. Zde nepřichází schůdky najednou, nýbrž postupně. Stejně tak i postupně končí. Přítomnost tohoto offsetu je samozřejmě žádoucí a v použitých vzorcích by měl být odstraněn. - 26 -

Obr. 25: Výstupní signál, jednotlivé tóny následují po sobě po 0,1s Obr. 26: Výstupní signál, jednotlivé tóny následují po sobě po 0,5s Na obrázku č. 26 je patrné, že počátky přehrávání jednotlivých záznamů nejsou od sebe stejně vzdálené. To je způsobeno tím že počátky tónů, ve mnou použitých záznamech nebyly, stejně vzdálené od počátku záznamu. Toto nerovnoměrné drobné zpoždění zní poněkud rušivě. Pro správnou funkci by měli být počátky všech záznamu synchronizovany. - 27 -

4.2 Technika smyček Jak už bylo řečeno, tón nezní po celou dobu znění stejně hlasitě, stejně tak se mění i jeho charakter. Na počátku v okamžik rozezvučení struny zní tón hlasitěji. Potom se tón ustálí a postupně jeho amplituda klesá. Nakonec když je uvolněna příslušná klávesa tak je tón utlumen úplně (dusítkem v klavíru). Této vlastnosti se dá využít pomocí techniky smyček (looping). Neukládá se celý dlouhý záznam znění jednoho tónu [17]. Uloží se zvlášť záznam náběžné fáze. Ustálený stav je vytvořen opakováním v nekonečné smyčce krátkého samplu. A nakonec je uložen ukončovací sampl, který se přehraje, když je uvolněna příslušná klávesa. Tyto záznamy musí mezi sebe přecházet tak, aby tento přechod byl pokud možno neslyšitelný. Touto konstrukcí dojde k zmenšením nároků na paměť, neboť nejsou použity dlouhé záznamy zvuku. Další výhoda je že uživatel má více pod kontrolu přehrávaný tón. Může se rychle přejít dle potřeby do ukončovací fáze. Nebo naopak je možné nechat znít tón nekonečně dlouho. - 28 -

5 Návrh jednoduchého syntetizátoru 5.1 Transpozice tónu Dva po sobě jdoucí tóny se liší od sebe svými základními kmitočty, i kmitočty vyšších 12 harmonických složek, v poměru 2 : 1. Tón o oktávu výše má dvojnásobnou frekvenci [19]. Pokud tedy přehrajeme tón A4 (440Hz) dvojnásobnou rychlostí než byl nahrán, dojde k transpozici všech harmonických složek a vznikne tón A5 (880Hz). Následující rovnice (2) vyjadřuje základní frekvenci tónů. Výsledek je odvozen od tónu, jež má na klaviatuře číslo 49 tedy od tónu A4 [20]. tón n 12 ( n) = 440 ( 2) 49 f [Hz] (2) Tab. 1: Základní frekvence tónů Teoreticky tedy stačí jediný záznam tónu klavíru na vytvoření kompletního syntetizátoru. Nevýhoda této techniky leží především ve faktu, že se transponují nejen složky harmonické, ale i zvuky jako úder kladívka na počátku tónu či jiné rezonanční zvuky samotného klavíru. - 29 -

Klíčové pro správnou funkci zařízení je, aby docházelo k frekvenci transpozici tónů dle potřeby a to s dostatečnou přesnosti. Neboť jednotlivé tóny jsou frekvenčně relativně blízko sebe. Posuv těchto kmitočtů by znět posluchači jako rozlaďění nástroje. Lidské vnímání je na toto rozladění velice citlivé. 5.2 Princip funkce zařízení Do paměti typu SD Card uložíme jediný soubor typu wav, který bude obsahovat záznam tónu klavíru např. tón C4 (261,6Hz). Ten bude navzorkován s frekvencí 11025Hz, to při délce tónu cca. 4s dává dohromady kolem 44000 vzorků nesoucích informaci o amplitudě tónu. Chceme-li například aby zazněl tón C5 musíme tón C4 přehrát s dvojnásobnou rychlostí. Pak dojde k transpozici z 261,6 na 523,2Hz. Plyne z toho také to, že záznam, který byl uložen s vzorkovacím kmitočtem 11025Hz je nyní přehráván rychlostí 22050 vzorků/s. f pož f př = 11025 [vzorků/s] (3) f C 4 Kde f př je výsledná rychlost přehrávání [vzorků/s], f pož představuje základní frekvence požadovaného tónu [Hz], f C4 odpovídá základní frekvence tónu C4 v paměti tj. 262,626Hz. Převrácená hodnota f př, je perioda mezi přehráním jednotlivých vzorků (vektorů). 1 10 = 6 t př [µs] (4) f př - 30 -

Tab. 2: Rychlost a perioda přehrávání tónů Abychom mohly přehrát požadovaný tón, musíme tedy přesně časovat prodlevu t př mezi přehráváním jednotlivých vektorů. Je nutno použít nastavitelný časovací obvod. Ten je realizovatelný pomocí čítače a nastavitelného komparátoru. Čítač bude čítat hodinový signál 50MHz. Poté co načítá požadovaný počet impulzů n 50 (5), dá komparátor impulz na výstup a zároveň dojde k resetu čítače v časovacím bloku. Vzniká tak přesně definovaná prodleva t př, odvozená od hodinového signálu FPGA. f n [-] (5) čit 6 50 = = t př 50 10 f př Hodnota n 50 (je uvedena decimální i hexadecimální hodnota) je zaokrouhlená na celé číslo a vzniká tady tak rozladění nástroje. Toto rozladění je naštěstí zcela minimální (maximálně 10 ns). To díky vysoké frekvenci, na které za řízení pracuje. - 31 -

Tab. 3: Nastavení časovacího bloku Jednotlivé vektory, nesoucí informaci o amplitudě zvuku, jsou uloženy za sebou v souboru wav. Při přehrávání je tedy nutno informaci o číslu vektoru, který je přehráván, uchovávat. S periodou t př se inkrementuje čítač, který ukazuje, prostřednictvím stejnojmenně označeného signálu na obr. 27, na číslo vzorku (vektoru) který je aktuálně přehráván. Toto číslo je předáváno dál do bloku řízení paměti. Tento blok periodicky načítá požadované vzorky z paměti SD. Pokud zní více tónů najednou, dojde k sečtení těchto vzorků a následně převodu DA převodníku. 5.3 Nároky kladené na syntetizátor 1) Schopnost načítat jednotlivé vzorky ze souboru v paměti typu SD Card 2) Tyto vzorky musí jít po sobě v řádném pořadí 3) Rychlost načítání a přehrávání je pro každý tón jiná 4) Tato rychlost musí být přesně řízená v čase 5) Možnost přehrávání více tónů najednou - 32 -

6 Realizace Syntetizátoru 6.1 Popis funkce Obr. 27: Vývojový diagram Po stisknutí klávesy dojde k aktivaci celého systému. Nejdříve se musí nastavit příslušná rychlost časovacího obvodu dle požadovaného tónu vis. t př v tabulce 2. Právě toto nastavení určuje, jaký tón vznikne. S periodou t př předává impulz do čítače, který ukazuje na aktuální pořadí přehrávaného vzorku uvnitř souboru wav v paměti. Při délce záznamu cca. 4s a vzorkovací rychlosti souboru mluvíme o přibližně 44000 vzorcích. Čítač s každým příchozím impulzem inkrementuje svůj stav a posune se tak s periodou t př na další vzorek v souboru. Číslo vzorku v pořadí se předá do bloku řízení paměti. Ten ho zpracuje a požádá paměť o zaslání příslušného vzorku. Ten je následně přeposlán do dalšího bloku na další zpracování. Nakonec je vzorek převeden z digitální do analogové formy. - 33 -

Dále je nutné zajistit, aby když dojde čítač k poslednímu vzorku souboru, tak aby se celý proces zastavil. Informace o délce souboru je uložená v hlavičce wav a musí být přečtena při inicializaci zařízení. Nebo je možno tuto hodnotu nastavit na pevno v čítači jako pojistku. 6.2 Blokové schéma Vzhledem k požadavku na schopnost zařízení syntetizovat několik tónů na jednou, jsem použil čtyři časovací/čítací jednotky ve schématu na Obr. 28 jednoduše označených jako bloky CC0 až CC3. Každý blok CC (od slovního spojení čítač a časovač) je kontrolován dvojicí vodičů označených jako Start a Stop. Dále jsou bloky spojeny 16 bitovou společnou sběrnicí k bloku řízení. Po této sběrnici je předána informace pro správné nastavení časovače pro příslušný tón při inicializaci bloku CC. Obr. 28: Blokové schéma syntetizátoru Pro zjednodušení návrhu budou signály start a stop také realizovány jako sběrnice, ale ta bude komunikovat kódem 1 z n. Každý blok CC bude tedy sledovat jen příslušný vodič nikoliv celou sběrnici. Takže například blok CC0 sleduje start(0) a stop(0) atd. - 34 -

6.1 Řídící blok 6.1.1 Návrh řídícího bloku Pozice blok řízení je znázorněn na obr. 28. Na vstupu tohoto bloku je klávesnice. Řídící blok kontroluje zvlášť každý blok CC pomocí separátních signálů označených jako start a stop. Ke všem blokům vede společná sběrnice označená na obr. 28 jako nastavení časovačů. Obr. 29: Blokové schéma řízení Po stisknutí klávesy blok řízení nejdříve pošle na sběrnici nastavení časovačů požadovaný vektor. Tento vektor je číslo n 50 (5) z tabulky č. 3 a určuje prodlevu t př časovacího obvodu v CC. V následujícím taktu blok řízení aktivuje jeden z aktuálně volných bloku CC pomocí signálu start. Daný blok CC si vektor ze sběrnice nastavení časovačů zkopíruje do vnitřní paměti a začne pracovat. Po skončení přehrávání pošle blok CC přes vodič stop zpět řídícímu bloku znamení, že je volný a může být znovu použit. Koncem přehrávání je myšleno, že soubor je přehrán kompletně až do posledního vzorku. Informaci o stavu bloků CC aktivní/volný musí blok řízení uchovávat v paměti. Výstup err může být použit jak signalizace přetížení zařízení, kdy všechny bloky CC jsou použity a dojde k dalšímu požadavku na přehrávání. - 35 -

6.2 Realizace řídícího bloku Obr. 30: Schéma řídícího bloku Ve schématu ze systému ISE obr. 30 je dodržena struktura z blokového schématu na obr. 29. Je zde navíc výstup stavout. Ten byl použit v simulaci abychom viděli v jakém stavu je paměť, jež ukazuje na stav bloků CC. Vstup gres je reset který má nastavit tuto paměť do defaultního stavu (0000) po zapnutí zařízení. Obr. 31: Behaviorální simulace řídícího bloku Na obr. 31 je dobře vidět chování obvodu. Červeně jsou zvýrazněné povely z klávesnice a zeleně reakce zařízení na ně. Vstupu klávesnice = 0001 odpovídá tón C4 tj. nastavení časovače = 4535. Hodnota souhlasí s hodnotou uvedenou v tabulce č. 3. - 36 -

Obr. 32: Podobvod řízení CC Na obr. 32 je dobře vidět jak s příchodem signálu znamení (200ns), který dává požadavek na začátek přehrávání, dává zařízení signálem start (zelený průběh) povel prvnímu bloku CC aby zahájil činnost. Zároveň dojde ke změně obsahu stavové paměti resp. na vývodu stavout. Tato paměť uchovává informaci o stavu bloků CC (světlomodrý průběh). Blok CC0 přešel do aktivního režimu, paměť přešla z 0000 do 0001. S příchodem další žádosti o přehrávání (signál znamení 600 ns) dojde k vytvoření povelu start pro blok CC1. Opět dochází ke změně v paměti stavů na 0011, nyní jsou již aktivní dva ze čtyř bloků CC. Tímto způsobem probíhá aktivace i zbylých bloků CC. Když blok CC ukončí svou činnost, pošle pomocí vodiče stop signál paměti stavů. Na obr. 32 je signál stop označen červenou barvou. V průbězích je vidět jak se s příchodem signálu stop mění obsah paměti stavů, indikovaný vývodem stavout. - 37 -

6.3 Blok CC 0-3 6.3.1 Návrh bloku CC Na Obr. 33 je znázorněno, co obsahuje každý blok CC. Modrým obdélníkem zvýrazněna část, představuje časovací obvod. Sestává z šestnáctibitového čítače a šestnáctibitového komparátoru s paměťovým registrem na vstupu označeném jako nastavení časovačů. Obr. 33: Detail jednoho z bloků CC syntetizátoru Druhý čítač ukazuje na vzorek, který je aktuálně přehráván (číslo vzorku ve wav souboru). Inkrementuje se s t př (4). Výstupem je vektor číslo vzorku, který se přává bloku řízení paměti. Další výstup je signál stop. Ten dává znamení řídícímu bloku, že daný blok CC došel na konec souboru wav a je tedy opět volný k další činnosti. - 38 -

6.3.2 Realizace bloku CC Obr. 34: Schéma bloku CC Navrhnuté zapojení na obr. 34 v systému ISE se drží struktury z blokového diagramu na obr. 33. Správnost zapojení je možné zkontrolovat pomocí RTL schématu. Na obr. 35 je pohled na celek. Syntetizátor systému ISE správně sestavil obvod ze tří bloku jak bylo navrženo. Obr. 35: RTS schéma bloku CC - 39 -

Obr. 36: RTS časovač Syntetizátor správně rozpoznal, že se jedná o jednoduchý šestnáctibitový čítač se dvěma vstupy reset. Obr. 37: RTS komparátor Syntetizátor správně sestavil obvod dle VHDL kódu. Schéma obsahuje klopný obvod D, komparátor vyšší nebo rovno. Poslední člen provádí logický součet signálů EQ a GT. - 40 -

Obr. 38: RTS čítač U tohoto bloku syntetizátor provedl několik změn. Na jednom z bloků přibyl pin. Provedené změny mají zřejmě za cíl optimalizovat zapojení. Syntetizátor správně rozpoznal čítač a detekci konce wav. - 41 -

6.3.3 Výsledek návrhu Obr. 39: Behaviorální simulace bloku CC Obvod se chová dle požadavků. Po přiveden impulsu start dojde k uložení hodnoty z vodiče nastav (nastavení časovačů) do vnitřní paměti. Na obr. 39 je to číslo 6 (300-700 ns). Dochází k inkrementaci časovače v CC. Po načítání požadovaných šesti taktů hodinového kmitočtu dochází k inkrementaci čítače v CC. V obr. 39 je graficky naznačeno, že tomu tak skutečně je. V prvním cyklu zařízení čeká šest period na hodnotě vektor = 0, než inkrementuje na vektor = 1. Nuloví vektor byl zároveň použít jako znamení pro následující bloky, že blok CC aktuálně nepracuje. Vzniká tady tedy drobná časová prodleva. Ale tato prodleva, jakožto prodleva ve startu přehrávání tónu, je v řádu 10µs a je tedy zcela zanedbatelná. 6.4 Řízení paměti Jako optimální řešení pro uchování záznamu zvuku byla zvolena paměťová karta typu SD Card. Paměť je typu FLASH. Nejčastěji se s ní lze setkat u digitálních fotoaparátu, či jiných video nebo audio zařízeních. - 42 -

Obr. 40: SD Card Asi největší výhoda, z pohledu konstruktéra zařízení, je že karty typu SD mohou komunikovat pomocí sběrnice SPI. Navrhované zařízení pracuje s jednotlivými bajty. Nové vysokokapacitní karty SD umí adresovat pouze bloky o kapacitě 512B. U starších karet je velikost bloku nastavitelná pomocí CSD registru. Tato fixní hodnota je pro navrhovaný syntetizátor dosti nepraktická a je tedy výhodné použít kartu starší verze, které jsou sto adresovat jednotlivé bajty. Komunikace SPI je sériová a je založena na dvouch 8 bitových registrech. Jeden na straně řídícího (master) zařízení a druhý na straně paměti. Každý příkaz má rovněž 8 bitů. Takže jeho odeslání resp. přijmutí trvá 8 hodinových taktů. Standardně SD Card podporuje hodinový kmitočet SPI minimálně 25MHz. 6.5 DA převodník Nejjednodušší je použití externího IO DA převodníku. Možnosti obvodu Spartan 3 jsou ale natolik široké, že může převodník realizovat sám pomocí běžného pinu a externího RC filtru. Xilinx poskytuje různé funkce (jádra - cores) ke stažení a použití. Jedna z nich je i DA převodník [21]. Bohužel není možné tuto funkci využit na neplacené verzi ISE Webpacku. Je možné realizovat primitivní převodník vlastní konstrukce na principu jednoduchého pulzně šířkového modulátoru a externího RC filtru. Řídí se střída obdélníkového signálu. Přesné časování je používáno už v blocích CC. Daly by se tedy použít již některé navrhnuté struktury. - 43 -

7 Závěr Zadané cíle se podařilo splnit jen částečně. V práci byla rozebrána problematika syntézy zvuku. Zjištěné poznatky se podařilo ověřit simulací v systému matlab a vyvodit následující závěry. Výsledný tón, získaný aditivní syntézou v systému matlab, se vzdáleně přiblížil tónu klavíru. V žádném případě ale nepostihoval dynamiku originálu. Tón zněl příliš synteticky. Pro další zlepšení vlastností generovaného tónu by bylo nutno udělat mnohem detailnější analýzu zvuku klavíru a navrhnout patřičný obvod. Vzhledem k tomu že již obvod schématu z obr. 18 dosahuje značné složitosti, je tento přístup k řešení syntetizátoru příliš náročný a neefektivní. Jako efektivnější se tedy jevila cesta práce se záznamem zvuku uloženým v paměti typu SD Card. V práci je ukázán a vysvětlen jeden z možných způsobů, kterým je možné tento druh syntetizátoru realizovat. Použitá metoda vycházela z techniky transpozice tónu. Tato technika využívá specifických frekvenčních vlastnosti tónů. Bohužel se nepodařilo dokončit včas celý návrh v jazyku VHDL do konce. Práce se ukázala podstatně složitější, než jsem předpokládal, nebo jak by se na první pohled mohlo zdát. - 44 -

8 Seznam použitých zdrojů NOVOTNÝ, R. Spolehlivost a diagnostika. Brno: Vysoké učení technické v Brně, 2001. 159 stran. ISBN 80-214-1993-8 [1] PINKER, J.; POUPA, M. Číslicové systémy a jazyk VHDL. 1.vyd. Praha: BEN technická literatura, 2006. 352 s. ISBN 80-7300-198-5. [2] KARBAN, P. Výpočty a simulace v programech Matlab a Simulink. 1.vyd. Brno: Computer Press, 2006. 217 s. ISBN 80-251-1301-9. [3] ZAPLATÍLEK, K.; DOŇAR, B. Matlab - začínáme se signály. 1.vyd. Praha: BEN technická literatura, 2006. 266 s. ISBN 80-7300-200-0. [4] MIRANDA, E. Computer Sound Design: Synthesis Techniques and Programming. Second edition. Oxford: Focal Press, 2002. 263 s. ISBN 0-240-51693-1. [5] RUSS, M. Sound Synthesis and Sampling. Second edition.oxford: Focal Press, 2004. 425 s. ISBN 0-240-51692-3. [6] WIKIPEDIA. Sound. [cit.2010-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/sound [7] WIKIPEDIA. Zvukové vlnění. [cit.2010-02]. Dostupné z WWW: http://cs.wikipedia.org/wiki/zvukové_vlnění [8] WIKIPEDIA. Ladění. [cit.2010-02]. Dostupné z WWW: http://cs.wikipedia.org/wiki/ladění [9] WIKIPEDIA. Equal temperament. [cit.2010-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/equal_temperament [10] WIKIPEDIA. Alikvotní tón. [cit.2010-02]. Dostupné z WWW: http://cs.wikipedia.org/wiki/alikvotní_tón [11] WIKIPEDIA. Piano. [cit.2010-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/piano [12] FLETCHER, N.; ROSSING, T. The physics of musical instruments. 2.vyd. Springer, 1998. 756 s. ISBN 0-387-98374-0. [13] Tipper, J.; Koňas, P. Model rezonanční desky koncertního klavíru. [2010-03]. Dostupné z WWW: http://wood.mendelu.cz/cz/sections/fem/da/public/publikace/tk_aum_petrof.pdf [14] BBC. Soul Deep episode 6. [cit.2010-04]. Dostupné z WWW: http://www.youtube.com/watch?v=wuaszff7yq0 [15] WIKIPEDIA. Moog synthesizer. [cit.2010-05]. Dostupné z WWW: http://en.wikipedia.org/wiki/moog_synthesizer [16] WOOD, S. Objective test methods for waveguide audio synthesis. [cit.2010-02]. Dostupné z WWW: http://contentdm.lib.byu.edu/etd/image/etd1777.pdf [17] TEOCHARISOVÁ, V. Sound Design III. [cit.2009-10]. Dostupné z WWW: http://www.muzikus.cz/pro-muzikanty-serialy/sound-design-iii-subtraktivni-synteza-a-pmsynteza~09~duben~2008/ - 45 -

[18] XILINX. Spartan-3 Starter Kit Board User Guide. [cit.2009-10]. Dostupné z WWW: http://www.fri.uni-lj.si/file/62585/s3board-rm.pdf [19] WIKIPEDIA. Rovnoměrně temperované ladění. [cit.2010-02]. Dostupné z WWW: http://cs.wikipedia.org/wiki/rovnoměrně_temperované_ladění [20] WIKIPEDIA. Piano key frequencies. [cit.2010-02]. Dostupné z WWW: http://en.wikipedia.org/wiki/piano_key_frequencies [21] XILINX. OPB deltasigma DAC. [cit.2010-03]. Dostupné z WWW: http://www.xilinx.com/support/documentation/ip_documentation/opb_deltasigma_dac.pdf - 46 -

9 Seznam obrázků Obr. 1: Piáno... 11 Obr. 2: Syntetizátor Mogg (1964)... 12 Obr. 3: VL1... 13 Obr. 4: Sampler AKAI MPC2000... 14 Obr. 5: Spartan-3 FPGA Starter Kit... 15 Obr. 6: Klaviatura... 16 Obr. 7: Amplituda tónu C4... 16 Obr. 8: FFT, první sekunda znění tónu C4... 17 Obr. 9: FFT, druhá sekunda znění tónu C4... 17 Obr. 10: FFT, třetí sekunda znění tónu C4... 18 Obr. 11: FFT, čtvrtá sekunda znění tónu C4... 18 Obr. 12: Schéma, harmonický průběh... 19 Obr. 13: Výstupní signál... 19 Obr. 14: Schéma zapojení... 19 Obr. 15: Amplitudová obálka... 20 Obr. 16: Schéma zapojení... 20 Obr. 17: Výstupní signál... 21 Obr. 18: Schéma zapojení... 21 Obr. 19: Amplitudová obálka... 22 Obr. 20: Časový průběh v t=0,5s... 22 Obr. 21: Časový průběh v t=3s... 23 Obr. 22: Blokové schéma syntetizátoru s pamětí typu FLASH... 24 Obr. 23: Uživatelské rozhraní syntetizátoru v Simulinku... 25 Obr. 24: Výstupní signál, přehrává se celá oktáva najednou... 26 Obr. 25: Výstupní signál, jednotlivé tóny následují po sobě po 0,1s... 27 Obr. 26: Výstupní signál, jednotlivé tóny následují po sobě po 0,5s... 27 Obr. 27: Vývojový diagram... 33 Obr. 28: Blokové schéma syntetizátoru... 34 Obr. 29: Blokové schéma řízení... 35-47 -

Obr. 30: Schéma řídícího bloku... 36 Obr. 31: Behaviorální simulace řídícího bloku... 36 Obr. 32: Podobvod řízení CC... 37 Obr. 33: Detail jednoho z bloků CC syntetizátoru... 38 Obr. 34: Schéma bloku CC... 39 Obr. 35: RTS schéma bloku CC... 39 Obr. 36: RTS časovač... 40 Obr. 37: RTS komparátor... 40 Obr. 38: RTS čítač... 41 Obr. 39: Behaviorální simulace bloku CC... 42 Obr. 40: SD Card... 43-48 -

10 Přílohy 10.1 Syntetizátor v prostředí Simulink 10.1.1 Hlavní funkce function y = Piano( c0, d1, e2, f3, g4, a5, h6, c7) y=0; %definice funkce eml.extrinsic ('WAV'); %volani externi matlabovske funkce wav y=wav(c0, d1, e2, f3, g4, a5, h6, c7); %predani parametru zdroju end 10.1.2 Funkce WAV % by Tomáš Němec function [vraci]=wav(c0, d1, e2, f3, g4, a5, h6, c7) vraci=0; fs=22050; data=zeros(220500,1); %vzorkovací kmitočet % prázdný vektor výstupních dat, 10s %nulta nota 0c********************************************************** if c0>=0 %podmínka přehrátí vzorku file=dir('0c.wav'); %název samplu for i=1:length(file); s_c0=wavread(file(i).name); %načtení samplu end d_c0=length(s_c0); poc_c0=c0*22050; %počet vzorku sammplu c0 %počátek při fs=22050-49 -

for n=1:d_c0; %nakopíruje sampl do výstupních dat data(n+poc_c0,1)=data(n+poc_c0,1)+s_c0(n,1); end end %prvni nota 1d********************************************************** if d1>=0 file=dir('1d.wav'); for i=1:length(file); s_d1=wavread(file(i).name); end d_d1=length(s_d1); poc_d1=d1*22050; %pocet vzorku d1 %pocatek při fs=22050 for n=1:d_d1; data(n+poc_d1,1)=data(n+poc_d1,1)+s_d1(n,1); end end %druha nota 2e********************************************************** if e2>=0 file=dir('2e.wav'); for i=1:length(file); s_e2=wavread(file(i).name); end d_e2=length(s_e2); poc_e2=e2*22050; %pocet vzorku e2 %pocatek při fs=22050 for n=1:d_e2; data(n+poc_e2,1)=data(n+poc_e2,1)+s_e2(n,1); end end %třetí nota 3f********************************************************** if f3>=0 file=dir('3f.wav'); for i=1:length(file); s_f3=wavread(file(i).name); end d_f3=length(s_f3); poc_f3=f3*22050; %pocet vzorku f3 %pocatek při fs=22050 for n=1:d_f3; data(n+poc_f3,1)=data(n+poc_f3,1)+s_f3(n,1); end - 50 -

end %čtvrtá nota 4g********************************************************** if g4>=0 file=dir('4g.wav'); for i=1:length(file); s_g4=wavread(file(i).name); end d_g4=length(s_g4); poc_g4=g4*22050; %pocet vzorku g4 %pocatek při fs=22050 for n=1:d_g4; data(n+poc_g4,1)=data(n+poc_g4,1)+s_g4(n,1); end end %pátá nota 5a********************************************************** if a5>=0 file=dir('5a.wav'); for i=1:length(file); s_a5=wavread(file(i).name); end d_a5=length(s_a5); poc_a5=a5*22050; %pocet vzorku a5 %pocatek při fs=22050 for n=1:d_a5; data(n+poc_a5,1)=data(n+poc_a5,1)+s_a5(n,1); end end %sestá nota 6h********************************************************** if h6>=0 file=dir('6h.wav'); for i=1:length(file); s_h6=wavread(file(i).name); end d_h6=length(s_h6); poc_h6=h6*22050; %pocet vzorku h6 %pocatek při fs=22050 for n=1:d_h6; data(n+poc_h6,1)=data(n+poc_h6,1)+s_h6(n,1); end end %sedma nota 7c****** posledni :-D ******************************** if c7>=0-51 -

file=dir('7c.wav'); for i=1:length(file); s_c7=wavread(file(i).name); end d_c7=length(s_c7); poc_c7=c7*22050; %pocet vzorku c7 %pocatek při fs=22050 for n=1:d_c7; data(n+poc_c7,1)=data(n+poc_c7,1)+s_c7(n,1); end end sound(data, fs); vraci=1; end %přehraje výstupní vektor data!!!!!!!!!!!!!!!!!!! 10.2 Syntetizátor ve VHDL 10.2.1 Blok CC časovač Zkráceno library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE entity casovac is generic (n : positive := 16); Port ( clk : in STD_LOGIC; res1, res2 : in STD_LOGIC; cas : out STD_LOGIC_VECTOR (n-1 downto 0)); end casovac; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA architecture Behavioral of casovac is -- std_logic res : std_logic; begin -- 1 asynchronni reset 11111111111111111111111111111111 --res := res1 or res2; process (res1, res2, clk) variable cnt : unsigned (n - 1 downto 0); begin if res1 = '1' or res2 = '1' then cnt := (others => '0'); -- 2 synchronni citac 222222222222222222222222222222222-52 -

elsif clk'event and clk = '1' then cnt := cnt + 1; else cnt := cnt; end if; -- 3 vystup 333333333333333333333333333333333333333333 cas <= std_logic_vector (cnt); end process; end Behavioral; --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 10.2.2 Blok CC - komparátor Zkráceno library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE entity komparator is Port ( nastav, vstup : in STD_LOGIC_VECTOR (15 downto 0); start, stop, clk : in STD_LOGIC; eq_gt : out STD_LOGIC); end komparator; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA architecture Behavioral of komparator is signal pamet : std_logic_vector(15 downto 0); signal eq, ggt : std_logic; begin --1 záchytný registr D nastavení komparátoru 1111111111 process(clk, start, nastav) begin if clk = '1' and clk'event then if start = '1' then pamet <= nastav; end if; end if; end process; --1záchytný registr D nastavení komparátoru 1111111111 --2 komprátor 2222222222222222222222222222222222222 eq <= '1' when vstup = pamet else '0'; ggt <= '1' when vstup > pamet else '0'; eq_gt <= (eq or ggt) when stop='0' else '0'; --2 komprátor 2222222222222222222222222222222222222 end Behavioral; --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 53 -

10.2.3 Blok CC - čítač Zkráceno library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE entity citac is Port ( vstup : in STD_LOGIC; res : in STD_LOGIC; --vodič start konec, konec2 : out STD_LOGIC; -- vodič stop vektor : out STD_LOGIC_VECTOR (15 downto 0)); end citac; --/EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA architecture Behavioral of citac is signal pomoc : std_logic_vector (15 downto 0); begin -- čítač 1111111111111111111111111111111111111111111111111111 process (res, vstup) variable cnt : std_logic_vector (15 downto 0); variable kekonci : std_logic; begin -- 11 asynchronní reset 1111111111111111111 if res = '1' then kekonci := '0'; end if; if res = '1' then cnt := ("0000000000000000"); -- 12 synchronní čítač 2222222222222222222 elsif vstup'event and vstup = '1' then cnt := cnt + 1; else cnt := cnt; end if; --konec wav if res = '1' then kekonci := '0'; elsif cnt >= "0000000000000100" then --délka wav (zatím jen 4) kekonci := '1'; else kekonci := kekonci; --konec je klopný obvod D end if; --indikuje konec dokud nedojde k resetu if kekonci = '0' then vektor <= cnt; else vektor <= "0000000000000000"; end if; - 54 -

konec <= kekonci; konec2 <= kekonci; end process; end Behavioral; --/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 10.2.4 Řídící blok nastavení Zkráceno library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE entity nastav is Port ( klaves : in STD_LOGIC_VECTOR (3 downto 0); nastcas : out STD_LOGIC_VECTOR (15 downto 0); znameni : out STD_LOGIC); end nastav; --//EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA architecture Behavioral of nastav is begin process (klaves) variable pomoc: std_logic_vector (15 downto 0); begin case klaves is -- 0000000000000000 when "0001" => pomoc := "0001000110110111"; --tón C4 when "0010" => pomoc := "0001000010111001"; --tón C?4/D?4 when "0011" => pomoc := "0000111111001000"; --tón D4 when "0100" => pomoc := "0000111011100110"; --tón d?'/e?' when "0101" => pomoc := "0000011100001000"; --tón E4 when "0110" => pomoc := "0000011010100011"; --tón F4 when "0111" => pomoc := "0000011001000011"; --tón F?4/G?4 when "1000" => pomoc := "0000010111101001"; --tón G4 when "1001" => pomoc := "0000010110010100"; --tón G?4/A?4 when "1010" => pomoc := "0000010101000100"; --tón A4 when "1011" => pomoc := "0000010011111001"; --tón A?4/B?4 when "1100" => pomoc := "0000010010110001"; --tón B4 when others => pomoc := "0000000000000000"; end case; nastcas <= pomoc; if klaves /= "0000" then znameni <= '1'; else znameni <= '0'; end if; - 55 -

end process; end Behavioral; 10.2.5 Řídící blok řízení Zkráceno library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE entity rizenicc3 is Port ( stop : in STD_LOGIC_VECTOR (3 downto 0); start : out STD_LOGIC_VECTOR (3 downto 0); stavout: out STD_LOGIC_VECTOR (3 downto 0); --sim err : out STD_LOGIC; clk, gres : in STD_LOGIC; znameni : in STD_LOGIC ); end rizenicc3; --EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA architecture Behavioral of rizenicc3 is signal startx : STD_LOGIC_VECTOR (3 downto 0); signal stav : STD_LOGIC_VECTOR (3 downto 0); begin start <= startx; stavout <= stav; -- řízení CC process(clk, gres, stav, znameni) variable pomoc : STD_LOGIC_VECTOR (3 downto 0); --zastupuje start (potažmo starx) begin if gres = '1' then pomoc := "0000"; end if; if gres = '1' then err <= '0'; end if; -- reset po zapnutí GLOBAL reset -- reset po zapnutí GLOBAL reset if clk = '1' and clk'event then pomoc := "0000"; end if; if znameni = '1' and znameni'event then if stav(0) = '0' then pomoc(0):= '1'; elsif stav(1) = '0' then pomoc(1) := '1'; elsif stav(2) = '0' then pomoc(2) := '1'; - 56 -

end if; elsif stav(3) = '0' then pomoc(3) := '1'; else err <= '1'; end if; startx <= pomoc; end process; --1 paměť stavů bloků CC 111111111111111111111111111 process(clk, stop,startx, gres) variable pamet : std_logic_vector(3 downto 0); begin --asynchronní reset paměti 1111111111111111111111111 if gres = '1' then pamet := "0000"; end if; -- paměť stavu bloku CC0 111111111111111111111111 if clk = '1' and clk'event then if stop(0) = '1' then pamet(0) := '0'; --blok CC0 se uvolnil elsif startx(0) = '1' then pamet(0) := '1'; --blok CC0 začal pracovat end if; end if; -- paměť stavu bloku CC1 111111111111111111111111 if clk = '1' and clk'event then if stop(1) = '1' then pamet(1) := '0'; --blok CC1 se uvolnil elsif startx(1) = '1' then pamet(1) := '1'; --blok CC1 začal pracovat end if; end if; -- paměť stavu bloku CC2 111111111111111111111111 if clk = '1' and clk'event then if stop(2) = '1' then pamet(2) := '0'; --blok CC2 se uvolnil elsif startx(2) = '1' then pamet(2) := '1'; --blok CC2 začal pracovat end if; end if; -- paměť stavu bloku CC3 111111111111111111111111 if clk = '1' and clk'event then if stop(3) = '1' then pamet(3) := '0'; --blok CC0 se uvolnil elsif startx(3) = '1' then pamet(3) := '1'; --blok CC3 začal pracovat end if; end if; stav <= pamet; end process; --1111111111111111111111111111111111111111111111111 end Behavioral; --AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - 57 -